package kjhgffdds;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;

// 모든 입출력은 서버쓰레드로 할 것이란다 ~
public class ServerThread extends Thread {

	ChatingServer server;
	Socket socket;
	private ObjectOutputStream send;
	private ObjectInputStream receive;

	boolean threadFlag = true;// 실행을 하는 조건에 입력값이 재대로 들어오는 상태에서 true라고 할때 데이터를
								// 인식시작한다.

	public ServerThread(ChatingServer server, Socket socket) {
		this.server = server; // server지정
		this.socket = socket; // server지정

		try {
			OutputStream os = socket.getOutputStream();
			send = new ObjectOutputStream(os);

			InputStream is = socket.getInputStream();
			receive = new ObjectInputStream(is);

			start();
		} catch (Exception ex) {

		}
	}// 보아라 오류가 한가득 이다..

	public void run() {
		try {
			while (threadFlag) {

				ChatData cd = (ChatData) receive.readObject();// 데이터 수신여부를 기다리고
																// 있다
				server.textArea.append(cd.getId()); // 클라이언트에서 입력을 하면은 서버로 입력을
													// 하는 부분이라고 알고있는데...내
													// 실행결과에서는 서버에서 클라이언트로 입력한
													// 결과만보여지고있다 원인은 textArea에
													// 있다는 것을 아는데 능력상 오류를 잡아내는
													// 일은 거이 모든걸 물어보고 해야되니 해결못봄
				if (cd.getCommand().equals("message")) {
					server.textField_5.setText(cd.getId() + ">>>>>>"
							+ cd.getMessage() + "\n");
					for (ServerThread st : server.clients) {
						st.send(cd);
					}

				} else if (cd.getCommand().equals("login")) {

					server.textArea.append(cd.getId() + "]" + cd.getMessage());

					send(cd);// 로그인 체크 관료를 햇다고...
					// 현재 유저가 추가되기전 서버가 저장하고 있는
					// 유저 목록을 클라이언트에게 전송
					ChatData temp = new ChatData();
					temp.setCommand("userlist");
					temp.setUserList(server.userList);
					send(temp);
					// 모든 유저들에게 자신의 login정보를 전송
					for (ServerThread st : server.clients) {
						st.send(cd);
					}

					server.userList.add(cd.getId());
					server.list_1.setListData(server.userList);

				} else if (cd.getCommand().equals("logout")) {
					for (ServerThread st : server.clients) {
						st.send(cd);
					}
					threadFlag = false;
					server.clients.remove(this);
					server.userList.remove(cd.getId());
					server.list_1.setListData(server.userList);

				}
			}

		} catch (Exception ex) {

		}
	}

	public void send(ChatData cd) {
		try {
			send.writeObject(cd);
		} catch (Exception ex) {
		}
	}

}
